package com.doitedu.core2

import com.doitedu.utils.SparkUtil
import org.apache.spark.{Partition, SparkConf, SparkContext}

/**
 * @Date: 22.7.5 
 * @Author: HANGGE
 * @qq: 598196583
 * @Tips: 学大数据 ,到多易教育
 * @Description:
 */
object C08_分区数 {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("分区数如何决定").setMaster(s"local[*]")
    conf.set("spark.default.parallelism","8")

    val sc = new SparkContext(conf)

    /**
     * 加载文件
     * Split 任务切片   任务切片的大小  300K
     *   文件个数和文件大小   {任务切片的大小}  默认是128M
     *   MapTask的个数如何决定  根据任务切片的个数
     *
     *
     *
     */
    val rdd = sc.textFile("data/partitions")

    val rdd1 = rdd.flatMap(_.split("\\s+"))
    val rdd2 = rdd1.map((_, 1))
    val rdd3 = rdd2.groupByKey()
    println(rdd.getNumPartitions)

    sc.stop()




  }

  private def collection_partitions(sc: SparkContext): Unit = {
    /**
     * 本地集合转RDD
     * 1 默认可用资源核数
     * 2 参数设置  创建RDD的时候执行 numSlice
     * 3   override def defaultParallelism(): Int =
     *  scheduler.conf.getInt("spark.default.parallelism", totalCores)
     *
     */
    val rdd = sc.parallelize(List(1, 2, 3))
    // 获取分区的个数
    println(rdd.getNumPartitions)
    // 获取所有的分区对象
    val arr: Array[Partition] = rdd.partitions
    for (partition <- arr) {
      println(partition.index)
    }
  }
}
